/**
 * 数据处理工具函数
 * 用于处理后端返回的数据结构，解决数组/对象冲突问题
 */

/**
 * 安全获取数组数据
 * @param {*} data - 原始数据
 * @param {Array} defaultValue - 默认值
 * @returns {Array} 数组数据
 */
export const safeGetArray = (data, defaultValue = []) => {
  return Array.isArray(data) ? data : defaultValue
}

/**
 * 安全获取对象数据
 * @param {*} data - 原始数据
 * @param {Object} defaultValue - 默认值
 * @returns {Object} 对象数据
 */
export const safeGetObject = (data, defaultValue = {}) => {
  return (typeof data === 'object' && !Array.isArray(data)) ? data : defaultValue
}

/**
 * 安全获取数组中的第一个元素（用于单条记录）
 * @param {*} data - 原始数据
 * @param {Object} defaultValue - 默认值
 * @returns {Object} 对象数据
 */
export const safeGetFirstItem = (data, defaultValue = {}) => {
  if (Array.isArray(data) && data.length > 0) {
    return data[0]
  }
  return defaultValue
}

/**
 * 处理后端返回的数据结构
 * @param {Object} rawData - 原始数据
 * @param {Object} fieldMapping - 字段映射配置
 * @returns {Object} 处理后的数据
 */
export const processApiData = (rawData, fieldMapping) => {
  const result = {}
  
  for (const [key, config] of Object.entries(fieldMapping)) {
    const { type, field, defaultValue } = config
    
    switch (type) {
      case 'array':
        result[key] = safeGetArray(rawData[field], defaultValue)
        break
      case 'object':
        result[key] = safeGetObject(rawData[field], defaultValue)
        break
      case 'firstItem':
        result[key] = safeGetFirstItem(rawData[field], defaultValue)
        break
      default:
        result[key] = rawData[field] || defaultValue
    }
  }
  
  return result
}
